package main

import "fmt"

// 控制函数 f 是否进行循环的标志位。
var isGo bool = true

func f(from string) {
	// 数字太小根本看不到效果，所以这里用了无限循环。
    for i := 0; isGo; i++ {
        fmt.Println(from, ":", i)
    }
}

func main() {

	// 使用 go f(s) 在一个 Go 协程中调用这个函数。这个新的 Go 协程将会并行的执行这个函数调用。
    go f("goroutine")

	// 你也可以为匿名函数启动一个 Go 协程。
    go func(msg string) {
		for isGo {
			fmt.Println(msg)
		}
    }("going")

	// 现在这两个 Go 协程在独立的 Go 协程中异步的运行，所以我们需要等它们执行结束。这里的 Scanln 代码需要我们在程序退出前按下任意键结束。
    var input string
	fmt.Scanln(&input)
	isGo = false
	fmt.Println("done")
	
	// 执行命令：go run goroutines.go > a.txt  过一段时间后按回车键，查询 a.txt 文件，
	// 可以看到在 goroutine 里面插着 going
}
